# -*- coding: iso-8859-15 -*-
import sys
from tipo import PALAVRARESERVADA, DELIMITADOR, OPERADOR, DOUBLE, INTEIRO, NOME, STRING, BOOLEANO
class sintax:
	def __init__(self):
		self.int = ['1','2','3','4','5','6','7','8','9','0']
		self.boolean = ['true', 'false']
		self.string = ['\"', '\'']
		self.delimitador = [ ";", ":", "(", ")", "[", "]", "..", ","]
		self.operador = [ "+", "-", "*", "//", "=", "==", ">=", "<=", ":=", "++" ]
		self.palavrasreservadas=["if","else", "for", "to", "then", "program", "writeln", "write", "integer","readln", "function", "var", "case", "of", "begin",  "end", "while", "do", "word", "real","array", "boolean", "procedure"]
	# verifica o tipo do token
	def especifytoken(self, token, tipo):
		token.tipo = tipo
	def settypeintoken(self, token):
		if token.gettoken() in self.palavrasreservadas:
			token.tipo = PALAVRARESERVADA
		elif token.gettoken() in self.delimitador:
			token.tipo = DELIMITADOR
		elif token.gettoken() in self.operador:
			token.tipo = OPERADOR
		elif (token.gettoken()[0] in self.int) or (token.gettoken()[0]== '.'):
			for i in token.gettoken():
				# verifica se o inteiro nao é uma variavel malformada
				#print str(i)+" ",
				if (not (i in self.int))and (not i=='.'):
					print "IDENTIFICADOR '" + str(token.gettoken()) + "' NaO PODE INICIAR POR NUMERO"  
					# OPA, gambia aqui
					
					sys.exit(1)
			if token.gettoken().find('.')<>-1:
				token.tipo = DOUBLE
			else:	
				token.tipo = INTEIRO
		elif token.gettoken() in self.boolean:
			token.tipo = BOOLEANO
		elif token.gettoken()[0] in self.string:
			if not (token.gettoken()[-1] == token.gettoken()[0]):
				print "STRING " + str(token.gettoken()) + " MAU FORMADA"
				sys.exit(-1)
			token.tipo = STRING
			
		else:
			token.tipo = NOME
			
			
	def listoftype(self, type):
		return type
